In general, a network device sends and receives network packets that have widely varying characteristics and functions. For example, certain packets contain network management control information, while others may carry content for a real-time application, such as streaming video or Voice-over-IP (VoIP) telephony. In addition, packets from active network flows tend to arrive at network devices in unpredictable bursts, requiring a substantial buffering capability on the part of a network device to accommodate the packet influx.
Because the amount and types of network traffic being transmitted, analyzed, routed, and filtered by computer networks continues to grow, many networks offer quality of service (QoS) guarantees beyond best-effort service in order to assure a certain level of performance. For example, a network may guarantee a certain maximum delay from a particular source to a particular destination. As another example, a network provider may promise to provide a guaranteed level of bandwidth to a particular node, e.g., customer, or for certain packet flows. These QoS guarantees are often grouped into priority levels, with each priority level providing a different level of service.
Typically, a network device offering QoS guarantees contains a number of priority queues corresponding to the different priority levels. As packets are received by the network device, they are analyzed and classified according to their priority. Each packet is then assigned to one of the many priority queues within the network device, where the packet is then buffered in order to await processing. The network device processes the packets in the priority queues in such a manner as to achieve the requisite level of service for the requirements specified by the corresponding QoS guarantee.
Outbound interfaces of the network device may be associated with priority queue sets dedicated to those interfaces. The network device assigns arriving packets destined for a particular destination to the priority queue set for the appropriate outbound interface according to the priority level of the packet. This, in addition to the bursty nature of many packet flows, results in individual queue latencies that are highly variable according to associated interface, priority, and time.